/**=== === === 强制转换为Number === === ===*/
// console.log(Number(true)); // 1
// console.log(Number(false)); // 0
// console.log(Number('123')); // 123
// console.log(Number('0123')); // 123
// console.log(Number('0x123')); // 291
// console.log(Number('123a')); // NaN
// console.log(Number('')); // 0
// console.log(Number(undefined)); // NaN
// console.log(Number(null)); // 0 emmm, 虽然null可以转换为number类型 但是 null == 0 为false

/** 如果是对象类型*/
// console.log(Number({a: 1})); // NaN
// console.log(Number([])); // 0
//↕等同于
// console.log(Number([].toString())); // 0
/** 其实是会先调用 valueOf 和 toString
,会先尝试调用valueOf,如果其值是一个被Number化,返回不是NaN的,则会用这个值作为返回
,否则会再尝试调用toString,如果toString返回的值Number化后依然是NaN，那么结果就是NaN了*/
/*let o = {
  a: 1
  , valueOf() {
    return 123
  }
  , toString(){
    return 234
  }
};
console.log(Number(o)); //123*/




/**=== === === 强制转换为Boolean === === ===*/
// console.log(Boolean(1)); // true
// console.log(Boolean(0)); // false
// console.log(Boolean(-1)); // true
// console.log(Boolean('0')); // true
// console.log(Boolean('')); // false
// console.log(Boolean(undefined)); // false
// console.log(Boolean(null)); // false

// console.log(Boolean({a: 1})); // true
// console.log(Boolean([])); // true
/** bool类型强制转换对象时,对象上的valueOf和toString返回值是无效的*/
// let o = {
//   a: 1
//   , valueOf() {
//     return false
//   }
//   , toString(){
//     return false
//   }
// };
// console.log(Boolean(o)); // true





/**=== === === 强制转换为String === === ===*/
// console.log(String(false)); // false
// console.log(String(true)); // true
// console.log(String(123)); // 123
// console.log(String(0)); // 0
// console.log(String(-123)); // -123
// console.log(String(null)); // null
// console.log(String(undefined)); // undefined

// console.log(String({a: 1})); // [object Object]
// console.log(String([])); // (空字符串)

/** 和Number不一样,String只会尝试调用对象的toString方法*/
let o = {
  a: 1
  , valueOf() {
    return JSON.stringify({xxx: 123})
  }
  , toString(){
    return JSON.stringify({yyy: 234})
  }
};
console.log(String(o)); // {"yyy":234}
